Q: ÉAÉbÉvÉãÉCÉxÉìÉgÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^ÇÕÇ«ÇÃÇÊǧDžǵǃéÊÇËèoÇπÇŒÇÊÇ¢Ç≈ǵÇÂǧǩÅH
A: Carbon ÇÃ Apple Event Manager
API ÇégǡǃÅAÉÅÉÇÉäÇ…íºê⁄ÉAÉNÉZÉXǵÅAÉAÉbÉvÉãÉCÉxÉìÉgÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ä÷òAïtÇØÇÁÇÍǃǢÇÈÉfÅ[É^ÇéÊÇËèoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBÉAÉbÉvÉãÇ≈ÇÕÅAAEDesc ç\ë¢ëÃÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^ÇÃÉRÉsÅ[ÇéÊìæÇ∑ÇÈÇΩÇflÇÃÅA2 ǬÇà Carbon ÉAÉNÉZÉbÉT API (AEGetDescDataSize ÇΔ
AEGetDescData ÅjÇíÒãüǵǃǢNjÇ∑ÅBDZÇÍÇÁ 2 ǬÇà API ÇÃìKêÿÇ»égópï˚ñ@DžǬǢǃÇÕÅAÉäÉXÉg 1 Ç…é¶ÇµÇ‹Ç∑ÅB
ÉäÉXÉg 1. AEGetDescDataSize
ÇΔ AEGetDescData Çégópǵǃ AEDesc ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^ÇÃÉRÉsÅ[ÇéÊìæ
|
Ptr theData;
Size theLength;
AEDesc theDesc;
OSStatus err;
....
/* ÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈ
ÉfÅ[É^ÇÃí∑Ç≥Çí≤Ç◊ÇÈ */
theLength = AEGetDescDataSize(&theDesc);
/* ÉfÅ[É^ÇÃÉRÉsÅ[Çï€éùÇ∑ÇÈÇΩÇflÇÃÉoÉbÉtÉ@ÇäÑÇËìñǃÇÈ*/
theData = malloc(theLength);
if (theData != NULL) {
/* ÉfÅ[É^ÇÉoÉbÉtÉ@Ç…ÉRÉsÅ[Ç∑ÇÈ */
err = AEGetDescData(theDesc, theData, theLength);
if ( err == noErr) {
/* éÊìæÇµÇΩÉfÅ[É^Ç≈âΩÇÁÇ©ÇÃëÄçÏÇé¿çsÇ∑ÇÈ*/
....
|
AEDesc ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^ÇïœçXÇ∑ÇÈÇΩÇflÇ…ÅAÉAÉvÉäÉPÅ[ÉVÉáÉìDžǮǢǃ
AEReplaceDescData ÉãÅ[É`ÉìÇégǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
èdóvÅF
AEGetDescData ÉãÅ[É`ÉìÅAAEGetDescDataSize ÉãÅ[É`ÉìÇ®ÇÊÇ—ÅA
AEReplaceDescData ÉãÅ[É`ÉìÇÕÅAíPèÉÇ»ílÇï€ë∂Ç∑ÇÈÉfÉBÉXÉNÉäÉvÉ^Ç…ÇÃÇ›égópÇ≈Ç´Ç‹Ç∑ÅBAppleEvent ÉåÉRÅ[ÉhÅAAERecord ÉåÉRÅ[ÉhÅA
Ç®ÇÊÇ— AEDescList ÉåÉRÅ[ÉhÇÃÇÊǧǻï°çáå^ÇÃÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ÇÕégǶNjÇπÇÒÅBï°çáå^ÇÃÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhDžDZÇÍÇÁÇÃÉãÅ[É`ÉìÇégǮǧÇΔÇ∑ÇÍÇŒÅAó\ä˙ǵǻǢåãâ Ç™ê∂Ç∂ÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉNÉâÉbÉVÉÖÇ∑ÇÈèÍçáǙdžÇËÇ‹Ç∑ÅB
|
îwåiíméØ
AEDesc ç\ë¢ëÃÇ…ÇÕÅAÉfÉBÉXÉNÉäÉvÉ^å^ÉtÉBÅ[ÉãÉhÇΔÉfÅ[É^ÉtÉBÅ[ÉãÉhÇà 2 ǬÇÃÉRÉìÉ|Å[ÉlÉìÉgÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBÉfÉBÉXÉNÉäÉvÉ^å^ÉtÉBÅ[ÉãÉhÇ…ÇÕÅAÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^ÇÃå^ÇéØï Ç∑ÇÈ 32 ÉrÉbÉgÇÃÉRÅ[ÉhÅi4 ï∂éöÇà ASCII ï∂éöÇÃèÍçáÇ™ëΩÇ¢ÅjÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBÉfÅ[É^ÉtÉBÅ[ÉãÉhÇÕÅAÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇΔä÷òAïtÇØÇÁÇÍǃǢÇÈÉfÅ[É^Ç÷ÇÃéQèΔÇï€ë∂Ç∑ÇÈÇΩÇflÇ…ÅAApple Event Manager
Ç…ÇÊÇËÉVÉXÉeÉÄì‡ïîÇ≈égópÇ≥ÇÍÇ‹Ç∑ÅB
ÉäÉXÉg 2 ÇÕ AEDesc
ç\ë¢ëÃÇÃêÈåæÇé¶ÇµÇ‹Ç∑ÅB
ÉäÉXÉg 2Å@AEDesc ç\ë¢ëÃÇÃêÈåæ
|
typedef AEDataStorageType *AEDataStorage;
struct AEDesc {
DescType descriptorType; /* ÉfÅ[É^å^ÉtÉBÅ[ÉãÉh */
AEDataStorage dataHandle; /* ÉfÅ[É^ÉtÉBÅ[ÉãÉh */
};
|
Mac OS X ÇÊÇËëOÇÃÉoÅ[ÉWÉáÉìÇà Mac OS Ç…Ç®ÇØÇÈ Apple Event Manager ÇÃé¿ëïÇ≈ÇÕÅAAEDesc Ç…ä÷òAïtÇØÇÁÇÍǃǢÇÈèÓïÒÇ Carbon Memory Manager Handle Ç™éQèΔÇ∑ÇÈÉÅÉÇÉäÉuÉçÉbÉNÇ…ï€ë∂Ç∑ÇÈÇΩÇflÇ… dataHandle ÉtÉBÅ[ÉãÉhÇégǡǃǢNjǵÇΩÅBǵǩǵÅACarbon
API ÇΔ Mac OS X ÇÃìoèÍÇ≈ÅAAEDesc Çà dataHandle ÉtÉBÅ[ÉãÉhÇÕÅAïsìßâflÇÃÉ|ÉCÉìÉ^å^Ç…ïœçXÇ≥ÇÍNjǵÇΩÅBDZÇÃïœçXÇ…î∫Ç¢ÅAÉ\ÉtÉgÉEÉFÉAǙDZÇÃÉtÉBÅ[ÉãÉhÇÃíÜêgDžǬǢǃâΩÇÁÇ©ÇÃâºíËÇÇ∑ÇÈÇÃÇÕïsìKêÿÇΔÇ»ÇËNjǵÇΩÅB
åxçêÅF
AEDesc ç\ë¢ëÃÇà dataHandle ÉtÉBÅ[ÉãÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈílÇégǡǃǢÇÈÅAdžÇÈÇ¢ÇÕ dataHandle ÉtÉBÅ[ÉãÉhÇ… Carbon
Memory Manager Handle Ç™ä‹Ç‹ÇÍǃǢÇÈDZÇΔÇâºíËÇ∑ÇÈÉRÅ[ÉhÇÕÅAåªç›ÉTÉ|Å[ÉgÇ≥ÇÍǃǮÇÁÇ∏ÅAÇ‹ÇΩ Mac OS X Ç…Ç®ÇØÇÈ Apple Event Manager ÇÃç°å„ÇÃé¿ëïÇ≈ÇÕã@î\ǵǻǢǩLJǵÇÍÇ‹ÇπÇÒÅB
|
AEDesc ç\ë¢ëÃé©ëÃÇÕïsìßâflÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBǵÇΩǙǡǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉ\ÉtÉgÉEÉFÉAÇ™ÅAAEDesc ÉåÉRÅ[ÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈÉfÅ[É^å^ÇämÇ©ÇflÇÈÇΩÇflÇ… descriptorType ÉtÉBÅ[ÉãÉhÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇÕâ¬î\Ç≈Ç∑ÅB
ǵǩǵÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕÅAdataHandle ÉtÉBÅ[ÉãÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈílÇÃà”ñ°Ç…ǬǢǃâΩÇÁÇ©ÇÃâºíËÇÇ∑ÇÈÇ◊Ç´Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅBç≈çÇÇÃåãâ ÇìæÇÈÇ…ÇÕÅAÉäÉXÉg 3 Ç…é¶Ç∑ÇÊǧDžÅAdataHandle ÉtÉBÅ[ÉãÉhÇÃì‡óeÇ…àÀë∂ǵǻǢÅAì‡óeDžǬǢǃâºíËǵǻǢÉRÅ[ÉhÇç\ízÇ∑Ç◊Ç´Ç≈Ç∑ÅB
ÉäÉXÉg 3 AEDesc ÉåÉRÅ[ÉhÇà dataHandle ÉtÉBÅ[ÉãÉhÇ…ï€ë∂Ç≥ÇÍǃǢÇÈílÇégÇÌǻǢÉRÅ[ÉhÇÃç\ízó·
|
AEDesc theDesc;
char* p = "Hello World";
/* ÉfÉBÉXÉNÉäÉvÉ^ÇçÏê¨Ç∑ÇÈ */
err = AECreateDesc(typeChar, p, strlen(p), &theDesc);
if (err == noErr) {
/* çÏê¨ÇµÇΩÉfÉBÉXÉNÉäÉvÉ^ÇégǡǃâΩÇÁÇ©ÇÃëÄçÏÇé¿çsÇ∑ÇÈ */
/* ÉfÉBÉXÉNÉäÉvÉ^ÇçÌèúÇ∑ÇÈ */
AEDisposeDesc(&theDesc);
}
|
ÉãÅ[ÉãÇÃó·äO
AEDesc ÉåÉRÅ[ÉhÇ…ä÷òAïtÇØÇÁÇÍǃǢÇÈÉfÅ[É^ǙdžÇÈǩǫǧǩÇämÇ©ÇflÇÈÇΩÇflÇ…ÅAÉäÉXÉg 4 Ç…é¶Ç∑ÇÊǧDžÅAÉRÅ[ÉhDžǮǢǃÅAdataHandle ÉtÉBÅ[ÉãÉhÇ NULL ÇΔî‰ärÇ∑ÇÈÇÃÇÕç\ǢNjÇπÇÒÅBǵǩǵÅAǪÇÃëºÇÃå`Ç≈ dataHandle ÉtÉBÅ[
ÉãÉhÇégǡǃLJà”ñ°ÇÕdžÇËÇ‹ÇπÇÒÅB
ÉäÉXÉg 4Å@AEDesc ÉåÉRÅ[ÉhÇà dataHandle ÉtÉBÅ[ÉãÉhDžǬǢǃà¿ëSÇ»âºíËÇǵÇΩÉRÅ[ÉhÇÃó·
|
AEDesc d = { typeNull, NULL }; // êVǵǢãÛÇÃÉfÉBÉXÉNÉäÉvÉ^Çèâä˙âªÇ∑ÇÈ
if (d.dataHandle != NULL) // ÉfÉBÉXÉNÉäÉvÉ^Ç™ãÛÇ≈ǻǢǩǫǧǩÇí≤Ç◊ÇÈïâíSÇÃåyÇ¢É`ÉFÉbÉN
|
[2002 îN 4 åé 10 ì˙]
|